{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6.7 Lab 3: PCR and PLS Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.cross_decomposition import PLSRegression\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(322, 21)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>AtBat</th>\n",
       "      <th>Hits</th>\n",
       "      <th>HmRun</th>\n",
       "      <th>Runs</th>\n",
       "      <th>RBI</th>\n",
       "      <th>Walks</th>\n",
       "      <th>Years</th>\n",
       "      <th>CAtBat</th>\n",
       "      <th>CHits</th>\n",
       "      <th>...</th>\n",
       "      <th>CRuns</th>\n",
       "      <th>CRBI</th>\n",
       "      <th>CWalks</th>\n",
       "      <th>League</th>\n",
       "      <th>Division</th>\n",
       "      <th>PutOuts</th>\n",
       "      <th>Assists</th>\n",
       "      <th>Errors</th>\n",
       "      <th>Salary</th>\n",
       "      <th>NewLeague</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-Andy Allanson</td>\n",
       "      <td>293</td>\n",
       "      <td>66</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>29</td>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "      <td>293</td>\n",
       "      <td>66</td>\n",
       "      <td>...</td>\n",
       "      <td>30</td>\n",
       "      <td>29</td>\n",
       "      <td>14</td>\n",
       "      <td>A</td>\n",
       "      <td>E</td>\n",
       "      <td>446</td>\n",
       "      <td>33</td>\n",
       "      <td>20</td>\n",
       "      <td>NaN</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-Alan Ashby</td>\n",
       "      <td>315</td>\n",
       "      <td>81</td>\n",
       "      <td>7</td>\n",
       "      <td>24</td>\n",
       "      <td>38</td>\n",
       "      <td>39</td>\n",
       "      <td>14</td>\n",
       "      <td>3449</td>\n",
       "      <td>835</td>\n",
       "      <td>...</td>\n",
       "      <td>321</td>\n",
       "      <td>414</td>\n",
       "      <td>375</td>\n",
       "      <td>N</td>\n",
       "      <td>W</td>\n",
       "      <td>632</td>\n",
       "      <td>43</td>\n",
       "      <td>10</td>\n",
       "      <td>475.0</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-Alvin Davis</td>\n",
       "      <td>479</td>\n",
       "      <td>130</td>\n",
       "      <td>18</td>\n",
       "      <td>66</td>\n",
       "      <td>72</td>\n",
       "      <td>76</td>\n",
       "      <td>3</td>\n",
       "      <td>1624</td>\n",
       "      <td>457</td>\n",
       "      <td>...</td>\n",
       "      <td>224</td>\n",
       "      <td>266</td>\n",
       "      <td>263</td>\n",
       "      <td>A</td>\n",
       "      <td>W</td>\n",
       "      <td>880</td>\n",
       "      <td>82</td>\n",
       "      <td>14</td>\n",
       "      <td>480.0</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-Andre Dawson</td>\n",
       "      <td>496</td>\n",
       "      <td>141</td>\n",
       "      <td>20</td>\n",
       "      <td>65</td>\n",
       "      <td>78</td>\n",
       "      <td>37</td>\n",
       "      <td>11</td>\n",
       "      <td>5628</td>\n",
       "      <td>1575</td>\n",
       "      <td>...</td>\n",
       "      <td>828</td>\n",
       "      <td>838</td>\n",
       "      <td>354</td>\n",
       "      <td>N</td>\n",
       "      <td>E</td>\n",
       "      <td>200</td>\n",
       "      <td>11</td>\n",
       "      <td>3</td>\n",
       "      <td>500.0</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-Andres Galarraga</td>\n",
       "      <td>321</td>\n",
       "      <td>87</td>\n",
       "      <td>10</td>\n",
       "      <td>39</td>\n",
       "      <td>42</td>\n",
       "      <td>30</td>\n",
       "      <td>2</td>\n",
       "      <td>396</td>\n",
       "      <td>101</td>\n",
       "      <td>...</td>\n",
       "      <td>48</td>\n",
       "      <td>46</td>\n",
       "      <td>33</td>\n",
       "      <td>N</td>\n",
       "      <td>E</td>\n",
       "      <td>805</td>\n",
       "      <td>40</td>\n",
       "      <td>4</td>\n",
       "      <td>91.5</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Unnamed: 0  AtBat  Hits  HmRun  Runs  RBI  Walks  Years  CAtBat  \\\n",
       "0     -Andy Allanson    293    66      1    30   29     14      1     293   \n",
       "1        -Alan Ashby    315    81      7    24   38     39     14    3449   \n",
       "2       -Alvin Davis    479   130     18    66   72     76      3    1624   \n",
       "3      -Andre Dawson    496   141     20    65   78     37     11    5628   \n",
       "4  -Andres Galarraga    321    87     10    39   42     30      2     396   \n",
       "\n",
       "   CHits  ...  CRuns  CRBI  CWalks  League Division PutOuts  Assists  Errors  \\\n",
       "0     66  ...     30    29      14       A        E     446       33      20   \n",
       "1    835  ...    321   414     375       N        W     632       43      10   \n",
       "2    457  ...    224   266     263       A        W     880       82      14   \n",
       "3   1575  ...    828   838     354       N        E     200       11       3   \n",
       "4    101  ...     48    46      33       N        E     805       40       4   \n",
       "\n",
       "   Salary  NewLeague  \n",
       "0     NaN          A  \n",
       "1   475.0          N  \n",
       "2   480.0          A  \n",
       "3   500.0          N  \n",
       "4    91.5          N  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(r'E:\\programming\\dataset\\Into_to_statstical_learning\\Hitters.csv')\n",
    "print(data.shape)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape is  (322, 23)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AtBat</th>\n",
       "      <th>Hits</th>\n",
       "      <th>HmRun</th>\n",
       "      <th>Runs</th>\n",
       "      <th>RBI</th>\n",
       "      <th>Walks</th>\n",
       "      <th>Years</th>\n",
       "      <th>CAtBat</th>\n",
       "      <th>CHits</th>\n",
       "      <th>CHmRun</th>\n",
       "      <th>...</th>\n",
       "      <th>PutOuts</th>\n",
       "      <th>Assists</th>\n",
       "      <th>Errors</th>\n",
       "      <th>Salary</th>\n",
       "      <th>League_A</th>\n",
       "      <th>League_N</th>\n",
       "      <th>Division_E</th>\n",
       "      <th>Division_W</th>\n",
       "      <th>NewLeague_A</th>\n",
       "      <th>NewLeague_N</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>293</td>\n",
       "      <td>66</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>29</td>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "      <td>293</td>\n",
       "      <td>66</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>446</td>\n",
       "      <td>33</td>\n",
       "      <td>20</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>315</td>\n",
       "      <td>81</td>\n",
       "      <td>7</td>\n",
       "      <td>24</td>\n",
       "      <td>38</td>\n",
       "      <td>39</td>\n",
       "      <td>14</td>\n",
       "      <td>3449</td>\n",
       "      <td>835</td>\n",
       "      <td>69</td>\n",
       "      <td>...</td>\n",
       "      <td>632</td>\n",
       "      <td>43</td>\n",
       "      <td>10</td>\n",
       "      <td>475.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>479</td>\n",
       "      <td>130</td>\n",
       "      <td>18</td>\n",
       "      <td>66</td>\n",
       "      <td>72</td>\n",
       "      <td>76</td>\n",
       "      <td>3</td>\n",
       "      <td>1624</td>\n",
       "      <td>457</td>\n",
       "      <td>63</td>\n",
       "      <td>...</td>\n",
       "      <td>880</td>\n",
       "      <td>82</td>\n",
       "      <td>14</td>\n",
       "      <td>480.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>496</td>\n",
       "      <td>141</td>\n",
       "      <td>20</td>\n",
       "      <td>65</td>\n",
       "      <td>78</td>\n",
       "      <td>37</td>\n",
       "      <td>11</td>\n",
       "      <td>5628</td>\n",
       "      <td>1575</td>\n",
       "      <td>225</td>\n",
       "      <td>...</td>\n",
       "      <td>200</td>\n",
       "      <td>11</td>\n",
       "      <td>3</td>\n",
       "      <td>500.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>321</td>\n",
       "      <td>87</td>\n",
       "      <td>10</td>\n",
       "      <td>39</td>\n",
       "      <td>42</td>\n",
       "      <td>30</td>\n",
       "      <td>2</td>\n",
       "      <td>396</td>\n",
       "      <td>101</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>805</td>\n",
       "      <td>40</td>\n",
       "      <td>4</td>\n",
       "      <td>91.5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   AtBat  Hits  HmRun  Runs  RBI  Walks  Years  CAtBat  CHits  CHmRun  ...  \\\n",
       "0    293    66      1    30   29     14      1     293     66       1  ...   \n",
       "1    315    81      7    24   38     39     14    3449    835      69  ...   \n",
       "2    479   130     18    66   72     76      3    1624    457      63  ...   \n",
       "3    496   141     20    65   78     37     11    5628   1575     225  ...   \n",
       "4    321    87     10    39   42     30      2     396    101      12  ...   \n",
       "\n",
       "   PutOuts  Assists  Errors  Salary  League_A  League_N  Division_E  \\\n",
       "0      446       33      20     NaN         1         0           1   \n",
       "1      632       43      10   475.0         0         1           0   \n",
       "2      880       82      14   480.0         1         0           0   \n",
       "3      200       11       3   500.0         0         1           1   \n",
       "4      805       40       4    91.5         0         1           1   \n",
       "\n",
       "   Division_W  NewLeague_A  NewLeague_N  \n",
       "0           0            1            0  \n",
       "1           1            0            1  \n",
       "2           1            1            0  \n",
       "3           0            0            1  \n",
       "4           0            0            1  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.drop('Unnamed: 0',axis = 1,inplace = True)\n",
    "qual_variables = [col for col in data.columns if data[col].dtype == 'O']\n",
    "data = pd.get_dummies(data,columns = qual_variables)\n",
    "print('Shape is ',data.shape)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# removing the null values\n",
    "data.dropna(inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.drop('Salary',axis = 1)\n",
    "y = data['Salary']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6.7.1 Principal Components Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we have to scale the predictors before applying pca\n",
    "scaler = StandardScaler()\n",
    "X_scaled = scaler.fit_transform(X)\n",
    "\n",
    "#applying pca\n",
    "pca = PCA()\n",
    "X_pca = pca.fit_transform(X_scaled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of data returned by pca is  (263, 22)\n"
     ]
    }
   ],
   "source": [
    "print('Shape of data returned by pca is ',X_pca.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of components are -  22\n"
     ]
    }
   ],
   "source": [
    "print('Total number of components are - ',len(pca.components_))\n",
    "# we can see that there are total 22 principal axis. Each features axis is represented as a 22-dimensional vector\n",
    "# If our dataset was 2-dimensional, than each principal axis ( here 2), would have been a line (2-dimensional vector)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3.33519423e+01, 1.98329668e+01, 1.59398706e+01, 9.00942497e+00,\n",
       "       7.60093752e+00, 3.81576505e+00, 3.15504103e+00, 2.34828437e+00,\n",
       "       1.21007079e+00, 1.13336303e+00, 8.39744718e-01, 5.94024833e-01,\n",
       "       4.35033641e-01, 2.77562127e-01, 2.37062334e-01, 1.27338736e-01,\n",
       "       6.40680776e-02, 2.21021282e-02, 5.39704206e-03, 1.99068363e-31,\n",
       "       8.72119816e-33, 6.40154819e-33])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lets see the vriance explained by each of the above mentioned principal components\n",
    "pca.explained_variance_ratio_*100\n",
    "#This is not so clear"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([33.4, 19.8, 15.9,  9. ,  7.6,  3.8,  3.2,  2.3,  1.2,  1.1,  0.8,\n",
       "        0.6,  0.4,  0.3,  0.2,  0.1,  0.1,  0. ,  0. ,  0. ,  0. ,  0. ])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# round it to 1 decimal points\n",
    "np.round(pca.explained_variance_ratio_*100,1)\n",
    "\n",
    "# we can see from the output of this cell that the first princiap component explains 33.4% of the variance, whereas the second\n",
    "# explains about 19.8% of the variance of the dataset. the last few principal components are irrevalent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PCR - principal component regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# What we did aboce was actually PCA, in PCR, we use the data we got by PCA and fit a linear regression model to it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we will also select the value of num_component, which is a hyperparamter we feed to PCA, incdicating in how many components \n",
    "# we are going to reduce the dimension of data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pcr(X,y):\n",
    "    scaler = StandardScaler()\n",
    "    X_scaled = scaler.fit_transform(X)\n",
    "    \n",
    "    num_components = X.shape[1]\n",
    "    scores = []\n",
    "    variability_explained = []\n",
    "    \n",
    "    for n_component in range(1,num_components+1):\n",
    "        pca = PCA(n_components=n_component)\n",
    "        X_pca = pca.fit_transform(X_scaled)\n",
    "        \n",
    "        lr = LinearRegression()\n",
    "        scores.append(-np.mean(cross_val_score(lr,X_pca,y,cv = 10,scoring = 'neg_mean_squared_error')))\n",
    "        variability_explained.append(np.sum(np.round(pca.explained_variance_ratio_*100,1)))\n",
    "        \n",
    "    return scores,variability_explained    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "scores,var_explained = pcr(X,y) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_components = np.arange(1,X.shape[1]+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '% explained by num of components')"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Lets see the variability explained as function of the num_of_components\n",
    "plt.figure(figsize = (10,6))\n",
    "plt.plot(num_components,var_explained)\n",
    "plt.xlabel('Number of components')\n",
    "plt.ylabel('Percent. of varuability explained')\n",
    "plt.title('% explained by num of components')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "# We can see from the above graph that we cannot really choose the value of percentage of variability explained as it is \n",
    "# ever increasing. We will look at cv score now.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6))\n",
    "plt.plot(num_components,scores,marker = 'o')\n",
    "plt.xlabel('Num of components')\n",
    "plt.ylabel('CV score - 10 fold')\n",
    "plt.title('Cross Validation')\n",
    "plt.xticks = num_components"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "# that;s interesting, although the graph looks very distorted, the y has values only between 11600 to 128000\n",
    "# The best error is for num_components = 18"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6.7.2 Partial Least Squares"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pls_regression(X,y):\n",
    "    num_components = X.shape[1]\n",
    "    scores = []\n",
    "    \n",
    "    for n_component in range(1,num_components+1):\n",
    "        scores.append(-np.mean(cross_val_score(PLSRegression(n_components=n_component,scale=True)\n",
    "                                               ,X_pca,y,cv = 10,scoring = 'neg_mean_squared_error')))\n",
    "        \n",
    "    return scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "pls_scores = pls_regression(X,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'PARTIAL LEAST SQUARES')"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (12,8))\n",
    "plt.plot(num_components,pls_scores,marker = 'o')\n",
    "plt.xlabel('Number of components')\n",
    "plt.ylabel('CV score - 10 fold')\n",
    "plt.title('PARTIAL LEAST SQUARES')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we can see here that the best result is when num_component = 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
